package br.com.condominio.view.beans;

import java.sql.SQLException;
import java.util.List;

import javax.faces.bean.ManagedBean;
import javax.faces.bean.SessionScoped;
import javax.faces.model.DataModel;
import javax.faces.model.ListDataModel;

import br.com.condominio.controller.VisitanteController;
import br.com.condominio.view.vo.VisitanteVO;

@ManagedBean(name = "visitanteMBean")
@SessionScoped
public class VisitanteMBean extends SessionMBean {

	// Controller para acesso ao DAO
	private final VisitanteController controller;

	private int residenciaSelected;
	private VisitanteVO visitanteVO = new VisitanteVO();
	private DataModel<VisitanteVO> listagemVisitantes;

	public VisitanteMBean() throws ClassNotFoundException, SQLException {
		controller = new VisitanteController();
		visitanteVO = new VisitanteVO();
	}

	public VisitanteVO getVisitanteVO() {
		return visitanteVO;
	}

	public void setVisitanteVO(VisitanteVO visitanteVO) {
		this.visitanteVO = visitanteVO;
	}

	public String update() throws SQLException, ClassNotFoundException {
		String retorno = "erro";

		// TODO: Fazer o vinculo com residencia...
		// visitanteVO.setCodResidencia(residenciaSelected);
		if (controller.atualizar(visitanteVO)) {
			retorno = "listagem_visitantes";
		}
		return retorno;
	}

	public String salvar() throws SQLException, ClassNotFoundException {
		String retorno = "../erro";

		try {
			// visitanteVO.setCodResidencia(residenciaSelected);
			if (visitanteVO.getCodVisitante() == 0) {
				if (controller.criar(visitanteVO)) {
					retorno = "listagem_visitantes";
				}
			} else {
				if (controller.atualizar(visitanteVO)) {
					retorno = "listagem_visitantes";
				}
			}

		} catch (Exception e) {
			e.printStackTrace();
		}
		return retorno;
	}

	public DataModel<VisitanteVO> getListagemVisitantes() throws SQLException,
			ClassNotFoundException {
		List<VisitanteVO> lista = controller.getAllVisitantes();
		listagemVisitantes = new ListDataModel<VisitanteVO>(lista);
		return listagemVisitantes;
	}

	public void setListagemVisitantes(DataModel<VisitanteVO> listagemVisitantes) {
		this.listagemVisitantes = listagemVisitantes;
	}

	public String excluir() throws SQLException, ClassNotFoundException {
		String retorno = "erro";

		if (controller.excluir(visitanteVO)) {
			retorno = "listagem_visitantes";
		}
		return retorno;
	}

	public void insert() {
		visitanteVO = new VisitanteVO();
	}

	public void selecionar() {
		visitanteVO = listagemVisitantes.getRowData();
	}

	// TODO: Fazer o vinculo com residencia...
	public int getResidenciaSelected() {
		return residenciaSelected;
	}

	// TODO: Fazer o vinculo com residencia...
	public void setResidenciaSelected(int residenciaSelected) {
		this.residenciaSelected = residenciaSelected;
	}

	// TODO: Fazer o vinculo com residencia...
	// public Collection<SelectItem> getResidencias() throws SQLException,
	// ClassNotFoundException {
	// Collection<SelectItem> lista = new ArrayList<SelectItem>();
	// List<ResidenciaVO> listaResidencias = new ResidenciaController()
	// .getAllResidencias();
	// for (int i = 0; i < listaResidencias.size(); i++) {
	// lista.add(new SelectItem(
	// listaResidencias.get(i).getCodResidencia(),
	// listaResidencias.get(i).getDescricao()));
	// }
	// return lista;
	// }
}
